Advertisement
Guest User

Untitled

a guest
Jun 29th, 2015
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * The code
  3.  */
  4.  
  5. import { default as React } from 'react';
  6. import { default as Draggable } from 'react-draggable';
  7.  
  8. let globalJSON;
  9.  
  10. class Image extends React.Component {
  11.  
  12.   render() {
  13.     return (
  14.       <Draggable>
  15.         <div style={{...this.state.css, transform: `rotate(${this.state.angle}deg)`}} className="draggy sprite"/>
  16.       </Draggable>
  17.     );
  18.   }
  19.   rotate(forwards) {
  20.     this.setState({
  21.       angle: this.state.angle + (forwards ? 45 : -45)
  22.     });
  23.   }
  24.   state = {
  25.     css: {},
  26.     angle: 0
  27.   };
  28.  
  29.   constructor(props) {
  30.     super(props);
  31.     this.src = props.src;
  32.     let elem = document.createElement('img');
  33.     elem.addEventListener('load', () => {
  34.       this.setState({
  35.         css: {
  36.           width: elem.width,
  37.           height: elem.height,
  38.           backgroundImage: `url("${globalJSON.images[this.src]}")`
  39.         }
  40.       });
  41.     });
  42.     elem.setAttribute('src', globalJSON.images[this.src]);
  43.   }
  44. }
  45.  
  46. class Scene extends React.Component {
  47.   state = {
  48.     bubbles: [],
  49.     sprites: [],
  50.     jsonSet: false,
  51.     sceneWidth: 1,
  52.     sceneHeight: 1
  53.   };
  54.  
  55.   setJSON(event) {
  56.     let jsonText = JSON.parse(event.target.value);
  57.     globalJSON = {
  58.       background: jsonText.background,
  59.       images: jsonText.images
  60.     };
  61.     this.setState({
  62.       jsonSet: true
  63.     });
  64.   }
  65.  
  66.   addNewImage(i) {
  67.     return () => {
  68.       this.setState(
  69.         {
  70.           sprites: this.state.sprites.concat([
  71.             <Image src={i}/>
  72.           ])
  73.         }
  74.       );
  75.     };
  76.   }
  77.  
  78.   undo() {
  79.     this.setState({
  80.         sprites: this.state.sprites.slice(0, this.state.sprites.length - 1)
  81.       }
  82.     );
  83.   }
  84.  
  85.   rotate(forwards) {
  86.     return () => {
  87.       /*let ar = this.state.sprites.slice();
  88.       ar[ar.length - 1].angle += (forwards ? 45 : -45);
  89.       this.setState({sprites: ar});*/
  90.       /*this.state.sprites[this.state.sprites.length - 1].setState({
  91.         angle: this.state.sprites[this.state.sprites.length - 1].state.angle + (forwards ? 45 : -45)
  92.       });*/
  93.       this.state.sprites[this.state.sprites.length - 1].rotate(forwards);
  94.     };
  95.   }
  96.  
  97.   render() {
  98.     if (this.state.jsonSet) {
  99.       return (
  100.         <div>
  101.           <div className="box">
  102.             <strong>SIZE:</strong>
  103.             Horizontal:
  104.             <button onClick={() => { this.setState({sceneWidth: this.state.sceneWidth + 1}); }}>+</button>
  105.             <button onClick={() => { this.setState({sceneWidth: this.state.sceneWidth - 1}); }}>-</button>
  106.             Vertical:
  107.             <button onClick={() => { this.setState({sceneHeight: this.state.sceneHeight + 1}); }}>+</button>
  108.             <button onClick={() => { this.setState({sceneHeight: this.state.sceneHeight - 1}); }}>-</button>
  109.           </div>
  110.           <div className="draggy" style={{
  111.             backgroundImage: `url("${globalJSON.background.image}")`,
  112.             width: (globalJSON.background.width * this.state.sceneWidth) + 'px',
  113.             height: (globalJSON.background.height * this.state.sceneHeight) + 'px'
  114.           }}>
  115.           {this.state.sprites}
  116.           </div>
  117.           <div className="box">
  118.             {globalJSON.images.map((image, i) =>
  119.               <button onClick={::this.addNewImage(i)}>
  120.                 <img src={image}/>
  121.               </button>
  122.             )}
  123.           </div>
  124.           <div className="box">
  125.             <strong>MOST RECENT SPRITE:</strong>
  126.             <button onClick={::this.undo}>Undo</button>
  127.             <button onClick={::this.rotate(true)}>Rotate 45 Degrees</button>
  128.             <button onClick={::this.rotate(false)}>Rotate -45 Degrees</button>
  129.           </div>
  130.           <button onClick={() => {console.log(this.state); }}>GET STATE</button>
  131.         </div>
  132.       );
  133.     } else {
  134.       return (
  135.         <div>
  136.           <p>Paste your JSON here.</p>
  137.           <textarea onChange={::this.setJSON}></textarea>
  138.         </div>
  139.       );
  140.     }
  141.   }
  142. }
  143.  
  144. let sceneElement = React.createElement(Scene);
  145.  
  146. window.addEventListener('load', () => {
  147.   React.render(sceneElement, document.getElementById('view'));
  148. });
  149.  
  150. /*
  151.  * Browser error
  152.  */
  153.  
  154. TypeError: _this3.state.sprites[(_this3.state.sprites.length - 1)].rotate is not a function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement