Harigami
ログイン
Harigamiは、ログイン不要のコード共有サービスです。コードの投稿後に発行されるURLでコードを共有できます。
PythonやRubyなど一部の言語は、投稿後にオンラインで実行することもできます。
誰でも無料で使えて、広告もありません。コードレビューやスニペットの代わりに使ってみてください。


詳細設定
+
anonymous タイトルなし
JavaScript
console.log(1);
  • 0
  • 0
anonymous タイトルなし
JavaScript
console.log(1);
  • 0
  • 0
anonymous タイトルなし
C#
// Namespace: Imas
public class FaceCtrl // TypeDefIndex: 10695
{
	// Fields
	private float[,] lipParam =  // 0x8
	{
	    { 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // 歯を食いしばらないように制限している
	    { 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 38.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	    { 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
	};
	public static string[] lipChar; // 0x0
	public static string[] facialMenu; // 0x4
	private DanceIdolInfo info; // 0xC
	public bool singing; // 0x10
	public bool eyesBlink; // 0x11
	public bool talking; // 0x12
	private bool lipOpen; // 0x13
	public bool eyesClose; // 0x14
	private bool lastEyesClose; // 0x15
	private float eyeTransTimer; // 0x18
	private bool eyeToClose; // 0x1C
	private bool lipChanged; // 0x1D
	private const float cheekTransTime = 0.1; // 0x0
	public float cheekBaseIntensity; // 0x20
	public int cheekLV; // 0x24
	private int cheeklastLV; // 0x28
	private float cheektranstimer; // 0x2C
	private const int mouthShapes = 14; // 0x0
	private const int eyeShapes = 18; // 0x0
	private MeshBlendParam[] expressions; // 0x30
	private FaceBlendParam[] paramsrc; // 0x34
	private float[] mouthOpenBuff; // 0x38
	private float[] mouthCloseBuff; // 0x3C
	private float[] mouthMixBuff; // 0x40
	private float[] eyeOpenBuff; // 0x44
	private float[] eyeCloseBuff; // 0x48
	private SkinnedMeshRenderer render; // 0x4C
	private Material face_material; // 0x50
	private CharacterDrawer drawer; // 0x54
	private int shaderPropID_IsReddish; // 0x58
	private int shaderPropID_ReddishIntensity; // 0x5C
	private const float flapOpenTime = 0.125; // 0x0
	private const float flapCloseTime = 0.225; // 0x0
	private const float flapTransTime = 0.07; // 0x0
	private float nextflaptime; // 0x60
	private bool mouthopen; // 0x64
	private float flaptranstimer; // 0x68
	private float flapopenscale; // 0x6C
	private const float eyeBlinkTime = 0.1; // 0x0
	private float nextblinktime; // 0x70
	private const float lipTransitionTime = 0.2; // 0x0
	private float lipNexttime; // 0x74
	public int curLip; // 0x78
	private int nextLip; // 0x7C
	private const float faceTransitionTime = 0.1333333; // 0x0
	private float faceNexttime; // 0x80
	public int curFace; // 0x84
	private int nextFace; // 0x88
	private bool lipTestMode; // 0x8C
	private float lipValue; // 0x90

	// Methods
	public void .ctor(string objname, DanceIdolInfo info0); // 0x696D40
	public static FaceBlendParam[] BlendParamLoad(string json); // 0x697048
	public static IEnumerable`1<FaceBlendParam> BlendParamLoadStep(IList topArray); // 0x6974CC
	public void Init(FaceBlendParam[] param) { // 0x697564
		for(int i = 0; i < param.Length; i++) {
			if(!string.Equals(param[i].cid, this.info.facialID))
				continue;
			
			// As the cid has been matched now load the expressions
			this.expressions = param[i].expressions;
			
			// Lip Relevant weight is the first 14 of 32 params
			for(int i = 0; i < 14; i++) {
				mouthOpenBuff[i] = expressions[0].param32Open[i];
				mouthCloseBuff[i] = expressions[0].param32Close[i];
			}
			
			for(int i = 14; i < 33; i++) {
				eyeOpenBuff[i - 14] = param32Open[i];
				eyeCloseBuff[i - 14] = param32Close[i];
			}
			
			if(this.cheekLV != 0) {
				this.cheeklastLV = this.cheekLV;
				this.cheekLV = 0;
				this.cheektranstimer = 0.1f;
			}
			
			this.eyeclose = false;
			this.talking = false;
			
			break;
		}
	}
	public void Init2() // 0x697928
	{
		if(this.paramsrc != null)
			this.Init(this.paramsrc);
		
		this.singing = true;
		this.eyeTransTimer = 0.0f;
		this.lipChanged = false;
		this.cheektranstimer = 0.0f;
		this.flaptranstimer = 0.0f;
		this.lipTestMode = false;
		this.lipValue = 0.0f;
		this.lipNextTime = 0.0f;
		this.lastEyeClose = false;
		this.eyesBlink = false;
		this.talking = false;
		this.lipOpen = false;
		this.eyesClose = false;
		this.curLip = -1;
		this.nextLip = -1;
		this.curFace = 0;
		this.nextFace = 0;
		this.nextblinktime = 1.2f;
		this.nextflaptime = 0.0f;
		this.cheekLV = 0;
		this.cheeklastLV = 0;
		this.eyeToClose = false;
		this.mouthopen = false;
		this.faceNextTime = 0.0f;
		
		this.SetFaceDirectNow(0);
		this.SetCheekDirect(0);
		this.eyeClose = false;
		
		this.SetFaceDirect(this.curFace);
		this.talking = false;
	}
	// リップのインデックスをlipParamのインデックスに変換します
	private int ConvLip(int n) // 0x698290
	{	
		if(n == 50) // "N"
			return 5;
		else if(n == 54) // 閉じ
			return -1;
		else {
			if(unchecked((uint)(n-55)) > 4)
				return n % 5;
			else // n = 55 ~ 59
				return n - 49;
		}
	}
	public void SetCheekDirect(int lv); // 0x69800C
	// チークの変更をキューします(0.1秒のトランジションタイムによってなめらかに切り替わります)
	public void SetCheek(int lv) { // 0x6978EC
		if(this.cheekLV != lv) {
			this.cheeklastLV = this.cheekLV;
			this.cheekLV = lv;
			this.cheektranstimer = 0.1f;
		}
	}
	public void SetEyeCloseDirect(bool sw); // 0x698284
	public void SetEyeClose(bool sw); // 0x69790C
	public void SetLipOpen(bool sw); // 0x6986E0
	public void SetLipOpenDirect(bool sw); // 0x6986F0
	public void SetTalking(bool sw); // 0x697914
	public void SetTestLip(float val); // 0x698870
	public void SetTestLipEnable(bool enabled); // 0x698878
	public void SetLipDirect(int n); // 0x698880
	public void SetSinging(bool sw); // 0x698AEC
	// リップの変更をキューします。(0.2秒のトランジションタイムによってなめらかに切り替わります)
	public void SetLip(int n) // 0x698A68
	{
		if(this.singing) {
			int specifiedLip = ConvLip(n);
			
			if(this.nextLip != specifiedLip) {
				if(this.curLip != this.nextLip) {
					this.lipNextTime = 0;
					this.curLip = this.nextLip;
				}
				this.nextLip = specifiedLip;
				this.lipNextTime = 0.2f;
			}
		}
	}
	// 表情をトランジションタイム無しで適用します。
	public void SetFaceDirect(int n) // 0x6982D4
	{
		this.SetFace(n);
		
		this.curFace = n;
		this.faceNextTime = 0.0f;
		this.nextblinktime = 0.0f;
			
		if(this.curLip == -1) {
			for(int i = 0; i < 14; i++) {
				this.mouthOpenBuff[i] = this.expressions[n].param32Open[i];
				this.mouthCloseBuff[i] = this.expressions[n].param32Close[i];
				this.SelectMouth();
				
				this.render.SetBlendShapeWeight(i, mouthMixBuff[i]);
			}
		}
		
		for(int i = 14; i < 32; i++)
			this.render.SetBlendShapeWeight(i,
				this.eyeClose ? this.expressions[n].param32Close[i] : this.expressions[n].param32Open[i]);
		
		float scale = (this.eyeClose ? this.expressions[n].param32Close[32] : this.expressions[n].param32Open[32]) * 0.01;
		if(scale != 0.0f)
			scale = 1.0 / scale;
		this.model.EyeTarget.scale = scale;
	}
	public void SetFaceDirectNow(int n); // 0x6979DC
	public void SetFace(int n) // 0x698B38
	{
		if(n != this.nextFace) {
			if(n != this.curFace) {
				this.faceNextTime = 0.0f;
				this.curFace = this.nextFace;
			}
			this.nextFace = n;
			this.faceNextTime = 0.13333333333f; // 7.5分の1秒
		}
	}
	// 表情をSkinnedMeshRendererに反映します。
	private void FaceCalc() { // 0x698C60
		this.faceNextTime -= Time.deltaTime;
		float weight, weight2; // curFaceとnextFaceのウェイト(各0~1)
		bool faceBuffChanged = false; // eyeOpen/CloseBuffが変更されたか(EyesBlink用)
		
		if(this.faceNextTime != 0.0f) {
			if(this.faceNextTime <= 0.0f) {
				this.faceNextTime = 0.0f;
				this.curFace = nextFace;
			}
			// curFaceとnextFaceの重みを計算
			weight = this.faceNextTime * 7.5f; //faceNextTime(最大7.5分の1秒)から重み(0~1)を計算する
			weight2 = 1.0f - weight;
			
			// mouthBuffを重みに基づいてブレンド
			for(int i = 0; i < 14; i++) {
				mouthOpenBuff[i] = expressions[curFace].param32open[i] * weight + expressions[nextFace].param32open[i] * weight2;
				mouthCloseBuff[i] = expressions[curFace].param32close[i] * weight + expressions[nextFace].param32close[i] * weight2;
			}
			
			// lipの状態に応じてmouthmMixBuffにさっきのBuffをロードする(LipCalc用)
			this.SelectMouth();
			
			if(this.curLip == -1)
				this.lipChanged = true;
			
			// eyeBuffを重みに基づいてブレンド
			for(int i = 14; i < 33; i++) {
				eyeOpenBuff[i] = expressions[curFace].param32open[i] * weight + expressions[nextFace].param32open[i] * weight2;
				eyeCloseBuff[i] = expressions[curFace].param32close[i] * weight + expressions[nextFace].param32close[i] * weight2;
			}
			
			// EyeTargetのScaleを修正
			float scale = this.eyesOpen ? eyeOpenBuff[18] : eyeCloseBuff[18];
			scale = (scale * 0.01) == 0.0f ? scale * 0.01f : 1.0 / (scale * 0.01f);
			this.info.model.EyeTarget.scale = scale;
			
			faceBuffChanged = true;
		}
		// 表情を反映
		this.EyesBlink(faceBuffChanged);
		
		// もしリップシンクなしならSelectMouthを強制的に行う
		if(this.curLip == -1)
			this.SelectMouth();
		
		// あとはライブ時には関係ない処理(lipTestMode, talking)
	}
	// リップをSkinnedMeshRendererに反映します。
	private void LipCalc() // 0x6997A0
	{
		if(!lipTestMode) {
			if(this.lipNextTime != 0.0f) {
				// prevNextTime <= 1.0f because this.lipNextTime <= 0.2f
				float prevNextTime = this.lipNextTime * 5.0f; // lipNextTime(最大0.2秒)からウエイト(0~1)を計算
				this.lipNextTime -= UnityEngine.Time.deltaTime;
				
				// it's time to update the lip
				if(this.lipNextTime < 0.0f) {
					this.lipNextTime = 0.0f;
					prevNextTime = 0.0f;
					this.curLip = this.nextLip;
					for(int i = 0; i < 14; i++)
						if(this.curLip == -1) // Closing
							this.render.SetBlendShapeWeight(i, mouthmixBuff[i]);
						else 
							this.render.SetBlendShapeWeight(i, lipParam[this.curLip, i]);
				}
				
				for(int i = 0; i < 14; i++) {
					float weight, weight2;
					if(this.curLip < 0) // リップシンクなしならFaceCalcで計算した値を使用
						weight = mouthmixBuff[i];
					else
						weight = lipParam[curLip, i];
					
					if(this.nextLip < 0) // リップシンクなしならFaceCalcで計算した値を使用
						weight2 = mouthmixBuff[i];
					else 
						weight2 = lipParam[nextLip, i];
					
					this.render.SetBlendShapeWeight(i, prevNextTime * weight + (1.0f - prevNextTime) * weight2);
				}
				this.lipChanged = false;
			}
			else if(this.curLip == -1 && this.talking)
				this.lipChanged = true;
			else
				this.lipChanged = false;
		}
		else
			this.lipChanged = true;
		
		if(this.lipChanged) {
			for(int i = 0; i < 14; i++) {
				if(this.curLip == -1) // Closing
					this.render.SetBlendShapeWeight(i, mouthmixBuff[i]);
				else 
					this.render.SetBlendShapeWeight(i, lipParam[this.curLip, i]);
			}
		}
	}
	private void SelectMouth() // 0x698B6C
	{
		if(this.lipOpen)
			for(int i = 0; i < 14; i++)
				mouthMixBuff[i] = mouthOpenBuff[i];
		else
			for(int i = 0; i < 14; i++)
				mouthMixBuff[i] = mouthCloseBuff[i];
	}
	// faceBuff(eyeOpenBuff,eyeCloseBuff)を適用します、瞬きが有効ならその処理も行います。
	private void EyesBlink(bool faceBuffChanged) { // 0x69960C
		if(!this.eyesBlink) { // まばたきなし
			if(eyesClose == lastEyesClose && eyeTransTimer <= 0.0f) { // 目の状態変化なし
				if(faceBuffChanged) // Buff変化時のみ反映
					this.SetFaceBlink(this.eyesClose ? 0.0f : 1.0f);
			}
			else { // 目の状態変化あり(開閉の変更またはトランジション中)
				if(eyesClose != lastEyesClose) { // フラグが変化していれば更新・トランジションタイムリセット
					this.lastEyesClose = this.eyesClose;
					this.eyeToClose = this.eyesClose;
					this.eyeTransTimer = eyeBlinkTime;
				}
				this.eyeTransTimer -= Time.deltaTime;
				
				if(eyeTransTimer > 0.0f) { // トランジション中
					// トランジションタイムから目の閉じ具合を求める
					float eyeCloseRatio = (this.eyeToClose ? (eyeBlinkTime - this.eyeTransTimer) : this.eyeTransTimer) / eyeBlinkTime;
					this.SetFaceBlink(eyeCloseRatio);
				}
				else { // トランジション後
					this.eyeTransTimer = 0.0f;
					if(this.eyeToClose) // 閉じに向かっていたなら完全に閉じる
						this.SetFaceBlink(1.0f);
					else // 開きに向かっていたなら完全に開く
						this.SetFaceBlink(0.0f);
				}
			}
		}
		else { // まばたきあり
			this.nextBlinkTime -= Time.deltaTime;
			if(this.nextBlinkTime > 0.0f) {
				if(this.nextBlinkTime <= 0.1f) { // 開きフェーズ
					// トランジションタイムから目の閉じ具合を求める
					float eyeCloseRatio = this.nextBlinkTime / eyeBlinkTime;
					this.SetFaceBlink(eyeCloseRatio);
				}
				else if(this.nextBlinkTime < 0.2f) { // 閉じフェーズ
					// トランジションタイムから目の閉じ具合を求める
					float eyeCloseRatio = (0.2f - this.nextBlinkTime) / eyeBlinkTime;
					this.SetFaceBlink(eyeCloseRatio);
				}
				else // まだまばたきは行わない
					this.SetFaceBlink(0.0f);
			}
			else { // まばたきし終わったあとだったら、次のblinktimeを設定する
				this.SetFaceBlink(0.0f);
				this.nextBlinkTime = Random.Range(0.0f, 1.0f) + 4.0f;
			}
		}
	}
	
	// faceBuffを反映します。valは目の閉じ具合です。
	private void SetFaceBlink(float val) { // 0x699BB8
		float openWeight = 1.0f - val;
		float closeWeight = val;
		
		for(int i = 0; i < 18; i++)
			this.render.SetBlendShapeWeight(i + 14, eyeOpenBuff[i]*openWeight + eyeCloseBuff[i]*closeWeight);
	}
	// チークをSkinnedMeshRendererに反映します。
	private void CheekCalc() { // 0x699C88
		float fval = 0.0f; // チークの値
		if(this.cheektranstimer != 0.0f) {
			this.cheektranstimer -= Time.deltaTime;
			if(this.cheektranstimer <= 0.0f) {
				this.cheektranstimer = 0.0f;
				if(cheekLV < 1)
					fval = 0.0f;
				else {
					fval = this.cheekBaseIntensity;
					if(cheekLV == 1)
						fval *= 0.5f;
				}
			}
			else { // トランジション中
				float lastval = 0.0f // トランジション元のチークの値
				if(cheeklastLV >= 1) {
					lastval = this.cheekBaseIntensity;
					if(cheeklastLV == 1)
						lastval *= 0.5f;
				}
				
				float destval = 0.0f; // トランジション先のチークの値
				if(this.cheekLV >= 1) {
					lastval = this.cheekBaseIntensity;
					if(cheekLV == 1)
						destval *= 0.5f;
				}
				
				float transweight = this.cheektranstimer / cheekTransTime; // トランジションの重み
				
				fval = lastval*transweight + destval*(1.0f-transweight);
			}
			// 反映
			this.SetCheekValue(fval);
		}
	}
	private float GetCheekValue(int lv); // 0x699D8C
	private void SetCheekValue(float val) { // 0x699DB8
		/* シェーダー依存コード */
	}
	// 現在のステートをSkinnedMeshRendererに反映します。(表情・リップ・チーク)
	public void Action() // 0x69A000
	{
		this.FaceCalc();
		this.LipCalc();
		this.CheekCalc();
	}
	public void SetFaceMaterial(Material material); // 0x69A024
	public void SetCharacterDrawer(CharacterDrawer drawer); // 0x69A02C
	public void _Set_lastEyesClose(bool last_eyes_close); // 0x69A034
	private float GetDeltaTime(); // 0x699600
	private static void .cctor(); // 0x69A048
}

// Namespace: Imas
public class MeshBlendParam // TypeDefIndex: 10693
{
	// Fields
	public float[] param32open; // 0x8
	public float[] param32close; // 0xC

	// Methods
	public void .ctor(); // 0x9AD0AC
}

// Namespace: Imas
public class FaceBlendParam // TypeDefIndex: 10694
{
	// Fields
	public string cid; // 0x8
	public MeshBlendParam[] expressions; // 0xC

	// Methods
	public void .ctor(); // 0x696C2C
}

il2cpp_array_new_full(Il2CppClass* array_class, il2cpp_array_size_t *lengths, il2cpp_array_size_t * lower_bounds) {
	int num = 0, num2 = 0;
	void * data_start;
	if(array_class->rank == 1) {
		if(array_class->byval_arg->attr & 0xFF0000 == 0x1D0000 || (num = 8, lower_bounds != nullptr) && *lower_bounds != 0) {
			if(*lengths < 0)
				throw gcnew System::OverFlowException("Arithmetic operation resulted in an overflow.");
			data_start = array_class->element_size * *lengths;
		}
	}
	else if (array_class->rank == 0) {
		
	}
}
  • 0
  • 1
anonymous タイトルなし
CSS
@charset "utf-8";

*,
*::before,
*::after {
  box-sizing: border-box;
}

/* 基本設定
****************************************/
html {
  font-size: 62.5%;
}

body {
  font-size: 16px;
  line-height: 1.7;
  color: #333;
  font-family: "Noto Sans JP", "游ゴシック Medium", "游ゴシック体", "Yu Gothic Medium", YuGothic, "ヒラギノ角ゴ ProN", "Hiragino Kaku Gothic ProN", "メイリオ", Meiryo, "MS Pゴシック", "MS PGothic", sans-serif;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

img {
  max-width: 100%;
  height: auto;
  vertical-align: middle;
}

iframe {
  vertical-align: middle;
}

/* CLEAR-FIX */
.clearfix {
  zoom: 1;
}

.clearfix:after {
  clear: both;
  content: ".";
  display: block;
  height: 0;
  line-height: 0;
  visibility: hidden;
}

/* 共通
****************************************/
.inner {
  width: 90%;
  max-width: 1000px;
  margin: 0 auto;
}

.sp_ib {
  display: none;
}

.flex {
  display: flex;
}

.fl_between {
  justify-content: space-between;
}

.sec {
  padding: 70px 0;
}

.sec_icon {
  display: block;
  text-align: center;
  font-size: 30px;
  line-height: 1;
  margin-bottom: 10px;
}

.sec_ttl {
  font-size: 24px;
  text-align: center;
  margin-bottom: 50px;
  letter-spacing: 0.075em;
}

.sec_ttl span {
  font-weight: bold;
}

.sec_ttl span::before,
.sec_ttl span::after {
  content: '';
  display: inline-block;
  width: 40px;
  height: 1px;
  background: #333;
  vertical-align: middle;
}

.sec_ttl span::before {
  margin-right: 50px;
}

.sec_ttl span::after {
  margin-left: 50px;
}

/* ヘッダー
****************************************/
.header {
  width: 100%;
  padding: 5px 0;
  background: rgba(255, 255, 255, 0.8);
  position: fixed;
  top: 0;
  left: 0;
  z-index: 10;
}

.header_inner {
  align-items: flex-end;
}

.header_nav li {
  margin-left: 45px;
}

.header_nav a {
  color: #333;
  text-decoration: none;
}

.header_nav a::after {
  content: '';
  display: block;
  width: 0;
  height: 2px;
  background: #333;
  transition: 0.3s;
}

.header_nav a:hover::after {
  width: 100%;
}

/* メインビジュアル
****************************************/
.mv {
  height: 400px;
  background-image: url(../image/mv.jpg);
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  color: #fff;
  text-align: center;
  padding-top: 150px;
}

.mv_ttl {
  font-size: 50px;
  margin-bottom: 40px;
}

.mv_subttl {
  font-size: 20px;
}

/* プロフィール
****************************************/
.profile_cont {
  width: 90%;
  max-width: 700px;
  margin: 0 auto;
  align-items: flex-start;
}

.profile_img {
  width: 280px;
  border-radius: 50%;
  overflow: hidden;
}

.profile_textbox {
  width: 380px;
}

.profile_name {
  font-size: 24px;
  font-weight: bold;
  margin-bottom: 15px;
}

/* スキル
****************************************/
.skill {
  background: url(../image/bg_slill.jpg) center / cover no-repeat;
}

.skill_list li {
  width: 220px;
}

.skill_list figure {
  text-align: center;
  margin-bottom: 50px;
}

.skill_list a {
  color: #0ca8cf;
}

/* 実績
****************************************/
.works_cont {
  width: 32%;
  max-width: 300px;
}

.works_cont_ttl {
  background: #0ca8cf;
  color: #fff;
  font-size: 18px;
  text-align: center;
  padding: 10px;
  font-weight: normal;
  margin-bottom: 35px;
  position: relative;
}

.works_cont_ttl::before {
  content: '';
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 14px 14px 0 14px;
  border-color: #0ca8cf transparent transparent transparent;
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -14px;
}

.works_cont_comennt {
  font-size: 18px;
  margin: 10px 0 5px;
}

.works_cont_link {
  text-align: right;
}

.works_cont_link a {
  color: #333;
  font-size: 14px;
}

/* お問合せ
****************************************/
.contact {
  background: #dbf6fd;
}

.contact_snslist {
  justify-content: center;
}

.contact_snslist li + li {
  margin-left: 75px;
}

.contact_snslist i {
  color: #0a86a6;
  font-size: 72px;
}

.contact_snslist a {
  transition: 0.3s;
}

.contact_snslist a:hover {
  opacity: 0.8;
}

.contact_linkbtn {
  width: 300px;
  margin: 65px auto 0;
}

.contact_linkbtn a {
  display: block;
  text-align: center;
  color: #0ca8cf;
  font-size: 24px;
  font-weight: bold;
  line-height: 80px;
  text-decoration: none;
  border: 2px solid #0ca8cf;
  border-radius: 40px;
  transition: 0.3s;
}

/* フッター
****************************************/
.footer {
  background: #0a86a6;
  color: #fff;
  text-align: center;
  font-size: 20px;
}

.contact_linkbtn a:hover {
  background: #0ca8cf;
  color: #dbf6fd;
}

.footer {
  padding: 25px;
}


/* レスポンシブ
****************************************/
@media screen and (max-width:1000px) {
  .skill_list {
    flex-wrap: wrap;
  }

  .skill_list li {
    width: 46%;
    margin-bottom: 4%;
  }
}

@media screen and (max-width:767px) {

  /* 共通 767px以下
  ****************************************/
  .sp_ib {
    display: inline-block;
  }

  .sec_ttl {
    font-size: 22px;
  }

  .sec_icon {
    font-size: 24px;
  }

  .mv_ttl {
    font-size: 36px;
    line-height: 1.4;
  }

  .sec_ttl span::before,
  .sec_ttl span::after {
    display: none;
  }

  .mv_subttl {
    font-size: 14px;
  }

  /* ヘッダー 767px以下
  ****************************************/
  .header {
    background: none;
  }

  .header_inner {
    display: block;
  }

  .header_logo {
    display: none;
  }

  .header_nav {
    margin-top: 10px;
    position: absolute;
    width: 100%;
    top: 100%;
    left: 0;
    margin-top: 0;
    transform: translateX(100%);
    transition: 0.3s;
  }

  .header_nav.active {
    transform: translateY(0);
  }

  .header_nav ul {
    display: block;
  }

  .header_nav li {
    margin-left: 0;
  }

  .header_nav li + li {
    border-top: 1px solid #333;
  }

  .header_nav li a {
    background: rgba(255, 255, 255, 0.8);
    display: block;
    text-align: center;
    font-size: 18px;
    line-height: 50px;
  }

  .header_nav a:hover::after {
    width: 0;
  }

  .header_navbtn {
    display: block;
    width: 40px;
    margin-left: auto;
    padding: 10px 0;
  }

  .header_navbtn span {
    display: block;
    width: 100%;
    height: 4px;
    background: #333;
  }

  .header_navbtn span + span {
    margin-top: 8px;
  }

  /* プロフィール 767px以下
  ****************************************/

  .profile_img {
    max-width: 280px;
    width: 100%;
    margin: 0 auto 20px;
  }

  .profile_textbox {
    width: 100%;
    max-width: 380px;
    margin: 0 auto;
  }

  .profile_cont {
    display: block;
  }

  /* スキル 767px以下
  ****************************************/

  .skill_list li {
    width: 100%;
    margin-bottom: 40px;
  }

  .skill_list figure {
    margin-bottom: 20px;
  }

  .skill_icon img {
    width: 80px;
  }

  /* 実績 767px以下
  ****************************************/

  .works_contwrap {
    display: block;
  }

  .works_cont {
    width: 100%;
    max-width: 100%;
    margin-bottom: 40px;
  }

  .works_cont figure img {
    width: 100%;
  }

  /* お問い合わせ 767px以下
  ****************************************/

  .contact_linkbtn {
    width: 90%;
    min-width: 300px;
  }

  .contact_snslist li + li {
    margin-left: 40px;
  }

  .contact_snslist i {
    font-size: 40px;
  }

  .contact_linkbtn a {
    font-size: 20px;
    line-height: 60px;
    border-radius: 30px;
  }

  .footer {
    font-size: 14px;
  }

}
  • 0
  • 1
anonymous タイトルなし
HTML
<!DOCTYPE html>
<html lang="ja">
  <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <meta content="IE=edge" http-equiv="X-UA-Compatible">
  <meta name="format-detection" content="telephone=no,address=no,email=no">
  <title>○○ポートフォリオ</title>
  <meta name="description" content="サイトの説明が入ります。">
  <!--Google Font-->
  <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:300,400,700&display=swap" rel="stylesheet">
  <!--Icon Font -->
  <script src="https://kit.fontawesome.com/54fc518417.js"></script>
  <link rel="stylesheet" href="css/reset.css">
  <link rel="stylesheet" href="css/style.css">
</head>

<body>
  <!-- ヘッダー -->
  <header class="header">
    <div class="header_inner inner flex fl_between">
      <p class="header_logo"><img src="image/logo.png" alt="Portforio" width="140"></p>
      <div class="header_navbtn"><span></span><span></span><span></span></div>
      <nav class="header_nav">
        <ul class="flex">
          <li><a href="#">HOME</a></li>
          <li><a href="#works">WORKS</a></li>
          <li><a href="#contact">CONTACT</a></li>
        </ul>
      </nav>

    </div>
  </header>
  <!-- ヘッダー end -->
  <main>
    <!-- メインビジュアル -->
    <div class="mv">
      <h1 class="mv_ttl">Your Name Portforio</h1>
      <p class="mv_subttl">名前プロフィール&ウェブ制作作品</p>
    </div>
    <!-- メインビジュアル end -->
    <!-- プロフィール -->
    <section class="profile sec">
      <i class="sec_icon far fa-user"></i>
      <h2 class="sec_ttl"><span>Name Name Profile</span></h2>
      <div class="profile_cont flex fl_between">
        <figure class="profile_img"><img src="image/sea.jpg" alt=""></figure>
        <div class="profile_textbox">
          <p class="profile_name">名前 名前</p>
          <p>
            2000/00 生まれ<br>
            なんとか県出身、大阪府大阪市在住<br>
            前職は◯◯で、ウェブデザイナーという職業を知り面白そうだと思い勉強をするためスクールに通いました。<br>
            想像よりウェブデザインやコーディングはロジカルなもので、おもしろさにハマり、いろんなものを勉強がてらに制作しました。<br>
            のちほどご紹介させていただきます。
          </p>
        </div>
      </div>
    </section>
    <!-- プロフィール end -->
    <!-- スキル -->
    <section class="skill sec">
      <i class="sec_icon fas fa-cogs"></i>
      <h2 class="sec_ttl"><span>SKILL</span></h2>
      <ul class="skill_list inner flex fl_between">
        <li>
          <figure class="skill_icon"><img src="image/ico_ps.png" alt=""></figure>
          <p>Photoshop歴:2ヶ月<br>勉強方法:スクール授業、◯◯の動画、◯◯記事で基本操作を習得。<br>バナーの模写を20個ほどしてようやくデザインにも気が回るようになりました。</p>
        </li>
        <li>
          <figure class="skill_icon"><img src="image/ico_ai.png" alt=""></figure>
          <p>Illustrator歴:1ヶ月<br>勉強方法:スクール授業、◯◯の動画、⃝◯記事で基本操作を習得。<br>Photoshopの操作に慣れてからようやく勉強をはじめました。ショップカードなどの模写をしてスキルアップ中です。</p>
        </li>
        <li>
          <figure class="skill_icon"><img src="image/ico_code.png" alt=""></figure>
          <p>HTML/CSS歴:2ヶ月<br>勉強方法:スクール授業、プロゲート、◯◯の動画。<br>レスポンシブ対応やjQueryなどを順次勉強中。レスポンシブで構造が甘かった部分をやり直したり、と奮闘中です。</p>
        </li>
        <li>
          <figure class="skill_icon"><img src="image/ico_camera.png" alt=""></figure>
          <p>カメラ歴:6年<br>NiconのDなんとかシリーズのなんとかかんとかを愛用。毎月1度カメラ好きな仲間と集まり撮影に出かけています。<a href="#">山写真のInstagram</a>もしています。</p>
        </li>
      </ul>
    </section>
    <!-- スキル end -->
    <!-- 実績 -->
    <section class="works sec">
      <i class="sec_icon fas fa-toolbox"></i>
      <h2 class="sec_ttl"><span>WORKS</span></h2>
      <div class="works_contwrap inner flex fl_between">
        <section class="works_cont">
          <h3 class="works_cont_ttl">バナー模写・バナーデザイン</h3>
          <figure><img src="image/works_bnr.jpg" alt=""></figure>
          <p class="works_cont_comennt">こーでぃんぐかだいですなんとかかんとかこーでぃんぐかだいですなんとかかんとかこーでぃんぐかだいですなんとかかんとか</p>
          <p class="works_cont_link"><a href="">バナーの一覧を見る</a></p>
        </section>
        <section class="works_cont">
          <h3 class="works_cont_ttl">ウェブサイトデザイン</h3>
          <figure><img src="image/works_design.jpg" alt=""></figure>
          <p class="works_cont_comennt">ウェブサイトのデザイン還付はPhotoshopで制作、コーディングも行った制作物はコーディング済みのものを置いていますのでごらんください。</p>
          <p class="works_cont_link"><a href="">サイトデザインを見る</a></p>
        </section>
        <section class="works_cont">
          <h3 class="works_cont_ttl">バナー模写・バナーデザイン</h3>
          <figure><img src="image/works_design.jpg" alt=""></figure>
          <p class="works_cont_comennt">こーでぃんぐかだいですなんとかかんとかこーでぃんぐかだいですなんとかかんとかこーでぃんぐかだいですなんとかかんとか</p>
          <p class="works_cont_link"><a href="">ロゴとDTPのデザインを見る</a></p>
        </section>
      </div>
    </section>
    <!-- 実績 end -->
    <!-- お問い合わせ -->
    <section class="contact sec">
      <h2 class="sec_ttl"><span>CONTACT</span></h2>
      <ul class="contact_snslist flex">
        <li><a href="#"><i class="fab fa-instagram"></i></a></li>
        <li><a href="#"><i class="fab fa-facebook-square"></i></a></li>
        <li><a href="#"><i class="fab fa-twitter-square"></i></a></li>
      </ul>
      <p class="contact_linkbtn"><a href="#">お問い合わせ</a></p>
    </section>
    <!-- お問い合わせ end -->
  </main>
  <!-- フッター -->
  <footer class="footer">
    <p><small>&copy;2019 withCreation</small></p>
  </footer>
  <!-- フッター end -->

  <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
  <script src="js/script.js"></script>



</body></html>








  • 0
  • 0
ガンマ@駆け出しエンジニア RCI投資戦略[レベル0交差]
Python
//@version=3
strategy("RCI投資戦略[レベル0交差]", overlay=false)
src = input(close, title="ソース")
mode = input(title="順張り[TRUE]/逆張り[FALSE]", type=bool, defval=false)
length = input(title="期間", defval=26, type=integer)

//RCI関数
ord(seq, idx, itv) =>
    p = seq[idx]
    o = 1
    for i = 0 to itv - 1
        if p < seq[i]
            o := o + 1
    o

d(itv) =>
    sum = 0.0
    for i = 0 to itv - 1
        sum := sum + pow((i + 1) - ord(src, i, itv), 2)
    sum

rci(itv) => (1.0 - 6.0 * d(itv) / (itv * (itv * itv - 1.0))) * 100.0

//RCIの計算
signal = rci(length)

//順張りと逆張りの入れ替え
l = mode ? 1 : 0
s = mode ? 0 : 1

//売買
longCondition = signal > 0 and signal[1] < 0
if (longCondition)
    strategy.entry("RCI Break Up", l)

shortCondition = signal < 0 and signal[1] > 0
if (shortCondition)
    strategy.entry("RCI Break Down", s)

//RCI描画
plot(signal, color=green)
  • 0
  • 1
ガンマ@駆け出しエンジニア RCI投資戦略[レベル]
Python
//@version=3
strategy("RCI投資戦略[レベル]", overlay=false)
src = input(close, title="ソース")
mode = input(title="順張り[TRUE]/逆張り[FALSE]", type=bool, defval=false)
length = input(title="期間", defval=26, type=integer)
upper = input(title="レベル[高]", defval=80, type=integer)
lower = input(title="レベル[低]", defval=-80, type=integer)

//RCI関数
ord(seq, idx, itv) =>
    p = seq[idx]
    o = 1
    for i = 0 to itv - 1
        if p < seq[i]
            o := o + 1
    o

d(itv) =>
    sum = 0.0
    for i = 0 to itv - 1
        sum := sum + pow((i + 1) - ord(src, i, itv), 2)
    sum

rci(itv) => (1.0 - 6.0 * d(itv) / (itv * (itv * itv - 1.0))) * 100.0

//RCIの計算
signal = rci(length)

//順張りと逆張りの入れ替え
l = mode ? 1 : 0
s = mode ? 0 : 1

//売買
longCondition = signal < lower
if (longCondition)
    strategy.entry("RCI Break Down", l)

shortCondition = signal > upper
if (shortCondition)
    strategy.entry("RCI Break Up", s)

//RCI描画
plot(signal, color=green)
  • 0
  • 0
ガンマ@駆け出しエンジニア RCI投資戦略[交差]
Python
//@version=3
strategy("RCI投資戦略[交差]", overlay=false)
src = input(close, title="ソース")
mode = input(title="順張り[TRUE]/逆張り[FALSE]", type=bool, defval=false)
fast = input(title="中期", defval=26, type=integer)
slow = input(title="長期", defval=52, type=integer)

//RCI関数
ord(seq, idx, itv) =>
    p = seq[idx]
    o = 1
    for i = 0 to itv - 1
        if p < seq[i]
            o := o + 1
    o

d(itv) =>
    sum = 0.0
    for i = 0 to itv - 1
        sum := sum + pow((i + 1) - ord(src, i, itv), 2)
    sum

rci(itv) => (1.0 - 6.0 * d(itv) / (itv * (itv * itv - 1.0))) * 100.0

//順張り逆張りの変更(数値の入れ替え)
f = mode ? rci(fast) : rci(slow)
s = mode ? rci(slow) : rci(fast)

//売買
longCondition = crossover(s, f)
if (longCondition)
    strategy.entry("RCI Cross Over", strategy.long)

shortCondition = crossunder(s, f)
if (shortCondition)
    strategy.entry("RCI Cross Under", strategy.short)

//RCI描画
plot(s, color=green)
plot(f, color=orange)
  • 0
  • 0
ガンマ@駆け出しエンジニア Moving Average 4Line
Python
//@version=3
study('Moving Average 4Line', overlay=true)
emaOrSma = input(title="EMA or SMA?", defval="EMA", options=["EMA", "SMA"])
maPeriodFast_1 = input(title="MA Period Fast 1", type=integer, defval=25, minval=1, maxval=10000)
maPeriodFast_2 = input(title="MA Period Fast 2", type=integer, defval=75, minval=1, maxval=10000)
maPeriodSlow_1 = input(title="MA Period Slow 1", type=integer, defval=100, minval=1, maxval=10000)
maPeriodSlow_2 = input(title="MA Period Slow 2", type=integer, defval=200, minval=1, maxval=10000)
showPerfectOrder = input(title="Show Perfect Order?", type=bool, defval=true)
fast_1 = emaOrSma == "EMA" ? ema(close, maPeriodFast_1) : sma(close, maPeriodFast_1)
fast_2 = emaOrSma == "EMA" ? ema(close, maPeriodFast_2) : sma(close, maPeriodFast_2)
slow_1 = emaOrSma == "EMA" ? ema(close, maPeriodSlow_1) : sma(close, maPeriodSlow_1)
slow_2 = emaOrSma == "EMA" ? ema(close, maPeriodSlow_2) : sma(close, maPeriodSlow_2)
perfectOrderByUpTrend = fast_1[1] > fast_2[1] and fast_2[1] > slow_1[1] and slow_1[1] > slow_2[1] ? true : false
perfectOrderByDownTrend = fast_1[1] < fast_2[1] and fast_2[1] < slow_1[1] and slow_1[1] < slow_2[1] ? true : false
plot(fast_1, color=orange)
plot(fast_2, color=red)
plot(slow_1, color=blue)
plot(slow_2, color=green)
bgcolor(perfectOrderByUpTrend and showPerfectOrder ? green : white, transp=90, offset=-1)
bgcolor(perfectOrderByDownTrend and showPerfectOrder ? orange : white, transp=90, offset=-1)
  • 0
  • 0
ガンマ@駆け出しエンジニア MACD Strategy
Python
//@version=4
strategy("MACD Strategy", overlay=true)

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

if (crossover(delta, 0))
    strategy.entry("MacdLE", strategy.long, comment="MacdLE")

if (crossunder(delta, 0))
    strategy.entry("MacdSE", strategy.short, comment="MacdSE")

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
  • 0
  • 0